#include "Enemy.hh"
#include <iostream>

// Enemy base class constructor
Enemy::Enemy(const std::string& name, const std::string& description, unsigned health, unsigned attack, unsigned defense)
    : Character(name, description, health, attack, defense) {}

// Lava_Hound constructor, sets initial attributes
Lava_Hound::Lava_Hound() : Enemy("Lava Hound", "A fierce beast, a loyal follower of the troll, uses fireballs as weapons, with an attack power of 3 points and defense of 1 point", 10, 3, 1) {}


void Lava_Hound::specialAttack(ICharacter& target) 
{
    std::cout << "Lava Hound uses a fireball to attack " << target.getName() << "!\n";
    this->attack(target);
}

// Bone_King constructor
Bone_King::Bone_King() : Enemy("Bone King", "A Bone King from Hell, uses bone swords as weapons, with an attack power of 4 points and defense of 2 points", 8, 4, 2) {}

void Bone_King::specialAttack(ICharacter& target) 
{
    std::cout << "Bone King swings his bone sword to attack " << target.getName() << "!\n";
    this->attack(target);
}

// Troll constructor (Boss)
Troll::Troll() : Enemy("Troll", "The demon ruling the Dark World, uses a Dark Hammer as a weapon, with an attack power of 5 points and defense of 3 points", 15, 5, 3) {}

void Troll::specialAttack(ICharacter& target) 
{
    std::cout << "Troll smashes " << target.getName() << " with his Dark Hammer!\n";
    this->attack(target);
}

